﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using PEMS.Common;

namespace PEMS.Server
{
    [Serializable]
    public class VizsgaIdopont
    {
        public string id { get; set; }
        public DateTime idopont { get; set; }
        public int maxLetszam { get; set; }
        public int szabadHelyek { get; set; }

        //ebben tároljuk a vizsgákat
        public SerializableDictionary<string, Vizsga> vizsgaList { get; set; }
        public SerializableDictionary<string, bool> vizsganMegjelentList { get; set; }


        public VizsgaIdopont(){
            vizsgaList = new SerializableDictionary<string, Vizsga>();
            vizsganMegjelentList = new SerializableDictionary<string, bool>();
        }

        public VizsgaIdopont(DateTime idopont, int maxLetszam)
        {
            id = "";
            vizsgaList = new SerializableDictionary<string, Vizsga>();
            vizsganMegjelentList = new SerializableDictionary<string, bool>();
            this.idopont = idopont;
            this.maxLetszam = maxLetszam;
            this.szabadHelyek = maxLetszam;
        }

        public Vizsga vizsgaJelentkezes(KurzusTagsag kurzusTag)
        {
            //készítünk egy vizsgát
            Vizsga vizsga = new Vizsga(kurzusTag);
            szabadHelyek--;
            vizsganMegjelentList.Add(kurzusTag.felevJelentkezes.hallgato.userName, false);
            
            // a kurzustagságban is tároljuk a vizsgát
            kurzusTag.vizsgak.Add(vizsga);

            //a vizsgát felfűzzük a vizsgaidőpont tárolójába (ez a vizsgajelentkezés)
            vizsgaList.Add(kurzusTag.felevJelentkezes.hallgato.userName, vizsga);
                      
            return vizsga;
        }

        public SerializableDictionary<int, Vizsga> teljesitettVizsgak(KurzusTagsag kurzusTag)
        {
            SerializableDictionary<int, Vizsga> lista = new SerializableDictionary<int, Vizsga>();
            try
            {
                int i = 0;
                foreach (KeyValuePair<string, Vizsga> vizsga in vizsgaList)
                {
                    if ((vizsga.Value.erdemjegy != ErdemjegyEnum.meg_nem_vizsgazott) &&
                        (vizsga.Value.erdemjegy != ErdemjegyEnum.nem_jelent_meg) &&
                        (vizsga.Value.erdemjegy != ErdemjegyEnum.elegtelen))
                    {
                        i++;
                        lista.Add(i, vizsga.Value);
                    }
                }
            }
            catch
            {
                return null;
            }
            return lista;
        }

        public SerializableDictionary<int, Vizsga> nemTeljesitettVizsgak(KurzusTagsag kurzusTag)
        {
            SerializableDictionary<int, Vizsga> lista = new SerializableDictionary<int, Vizsga>();
            try
            {
                int i = 0;
                foreach (KeyValuePair<string, Vizsga> vizsga in vizsgaList)
                {
                    if ((vizsga.Value.erdemjegy == ErdemjegyEnum.meg_nem_vizsgazott) &&
                        (vizsga.Value.erdemjegy == ErdemjegyEnum.nem_jelent_meg) &&
                        (vizsga.Value.erdemjegy == ErdemjegyEnum.elegtelen))
                    {
                        i++;
                        lista.Add(i, vizsga.Value);
                    }
                }
            }
            catch
            {
                return null;
            }
            return lista;
        }

        public bool jelentkezettVizsgara(string hallgatoID)
        {
            if (vizsgaList.ContainsKey(hallgatoID))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool vizsganMegjelent(string hallgatoID)
        {
            if (vizsganMegjelentList.ContainsKey(hallgatoID))
            {
                if (vizsganMegjelentList[hallgatoID])
                {
                    return true;
                }
            }
            return false;
        }

        public ErdemjegyEnum getVizsgaEredmeny(string hallgatoID)
        {
            return vizsgaList[hallgatoID].erdemjegy;
        }

        public void vizsgaErtekelese(string hallgatoID, ErdemjegyEnum erdemjegy)
        {
            vizsgaList[hallgatoID].erdemjegy = erdemjegy;
            vizsganMegjelentList[hallgatoID] = true;
        }
    }
}
